﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using proyEspacio.baseDato;

namespace proyEspacio.logicaNegocio
{
    public static class admSatelite
    {
        /// <summary>
        /// Metodo para saber si existe un satelite en la base de datos
        /// </summary>
        /// <param name="busqueda">parametro de busqueda</param>
        /// <returns></returns>
        public static bool existeSatelite(string busqueda)
        {
            espacioEntities bd = new espacioEntities();
            return bd.Satelite.Any(g => g.Nombre == busqueda);
        }
        /// <summary>
        /// Metodo que permite ingresar un nuevo satelite a la base de datos
        /// </summary>
        /// <param name="entrada">Nombre del satelite</param>
        /// <param name="idPlaneta">Identificador de planeta</param>
        /// <returns></returns>
        public static string ingresaSatelite(string entrada, int idPlaneta)
        {
            var existe = existeSatelite(entrada);
            if (existe)
            {
                return "El satelite ya se encuentra en la base de datos";
            }
            else
            {
                espacioEntities bd = new espacioEntities();
                Satelite ingreso = new Satelite
                {
                    Nombre = entrada,
                    Id_planeta = idPlaneta
                };
                bd.Satelite.Add(ingreso);
                bd.SaveChanges();
                return "Satelite ingresado";
            }
        }
        /// <summary>
        /// Busca todas los satelites pertenecientes a un planeta
        /// </summary>
        /// <param name="satelites">Lista de satelites ya encontradas</param>
        /// <param name="idPlaneta">Identificador de planeta</param>
        /// <returns></returns>
        public static Satelite buscaSistPlaneta(List<string> satelites, int idPlaneta)
        {
            espacioEntities bd = new espacioEntities();
            return bd.Satelite.FirstOrDefault(s => s.Id_planeta == idPlaneta & !satelites.Contains(s.Nombre));
        }
        /// <summary>
        /// Elimina un satelite de la base de datos
        /// </summary>
        /// <param name="satelite">satelite a eliminar</param>
        /// <returns></returns>
        public static string eliminaSatelite(string satelite)
        {
            espacioEntities bd = new espacioEntities();
            Satelite eliminar = bd.Satelite.FirstOrDefault(s=> s.Nombre==satelite);
            bd.Satelite.Remove(eliminar);
            bd.SaveChanges();
            return "Satelite eliminado";
        }
        /// <summary>
        /// Elimina un grupo de satelites que sean del mismo planeta
        /// </summary>
        /// <param name="idPlaneta">Identificador de planeta</param>
        /// <returns></returns>
        public static string eliminaSatelites(int idPlaneta)
        {
            espacioEntities bd = new espacioEntities();
            Satelite eliminar = null;
            do
            {
                eliminar = bd.Satelite.FirstOrDefault(s => s.Id_planeta == idPlaneta);
                bd.Satelite.Remove(eliminar);
                bd.SaveChanges();
            } while (eliminar != null);
            return "Satelites eliminados";
        }
        /// <summary>
        /// Permite editar el nombre de un satelite
        /// </summary>
        /// <param name="idSatelite">Identificador de satelite</param>
        /// <param name="nombre">Nombre nuevo del satelite</param>
        /// <returns>un mensaje</returns>
        public static string editaSatelite(int idSatelite, string nombre)
        {
            espacioEntities bd = new espacioEntities();
            Satelite editar = bd.Satelite.Find(idSatelite);
            editar.Nombre = nombre;
            bd.SaveChanges();
            return "Datos actualizados";
        }
    }
}
